/**
 * 超级管理员实体类 - 系统级管理员，可以管理所有企业
 *
 * 开发人员：徐少洋
 * 开发时间：2025-11-21
 * 模块职责：定义超级管理员的基本信息和权限属性，实现双层管理架构
 *
 * 技术要点：
 * - 不绑定任何企业，可以管理所有企业
 * - 独立的认证和授权体系
 * - 完整的操作日志记录
 * - 支持多超级管理员协作
 *
 * 权限范围：
 * - 创建、编辑、删除企业
 * - 查看所有企业数据（仅查看，不操作业务）
 * - 管理企业订阅和配额
 * - 查看系统统计和监控数据
 */
package com.pbl.entity;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.*;

import javax.persistence.*;
import java.time.LocalDateTime;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
@Table(name = "super_admins")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class SuperAdmin {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true, length = 64)
    private String username;

    @Column(nullable = false, unique = true, length = 128)
    private String email;

    @Column(length = 32)
    private String phone;

    @JsonIgnore
    @Column(name = "password_hash", nullable = false, length = 255)
    private String passwordHash;

    @Column(name = "real_name", length = 64)
    private String realName;

    @Column(nullable = false)
    private Integer status; // 1=启用, 0=禁用

    @Column(name = "last_login_at")
    private LocalDateTime lastLoginAt;

    @Column(name = "last_login_ip", length = 45)
    private String lastLoginIp;

    @Column(name = "created_at", insertable = false, updatable = false)
    private LocalDateTime createdAt;

    @Column(name = "updated_at", insertable = false, updatable = false)
    private LocalDateTime updatedAt;
}

